package __3_simulation;

/*

约翰夫环：8个人围成一个圈轮流报一个数，从第一个人开始报1，第二个人报2，第三个人报3，第四个人报1...1，2，3循环报数
报3的人出局，其它人接着报，最后一定会剩下一个人，输入一个整数N(1~8)，表示从第几个人开始报数，输出最后剩下的人的编号
人物编号：1 2 3 4 5 6 7 8
所报数字：1 2 3 1 2 3 1 2
人物编号：1 2 4 5 7 8
所报数字：3 1 2 3 1 2
人物编号：2 4 7 8
所报数字：3 1 2 3
人物编号：4 7
所报数字：1 2
所报数字：3 1
人物编号：7

---

0代表留下，1代表已出局

---

这题其实用集合会方便一点
这里改成了m个人，报num个数，从第N个人开始报

---

递归实现
难点：用原来m个人的编号来表示减员后的编号，其中的数学关系很难找
1 2 3 4 5 6 7 8
比如减去了3号，还剩下
1 2 4 5 6 7 8
1 2 3 4 5 6 7
我要表示减员后的3号，那么它其实是原来的4号，
又减去了6号，还剩下
1 2 4 5 7 8
1 2 3 4 5 6
我要表示减员后的5号，那么它其实是原来的7号，
又减去了1号，还剩下
2 4 5 7 8
1 2 3 4 5
我要表示减员后的1号，那么它其实是原来的2号，
又减去了5号，还剩下
2 4 7 8
1 2 3 4
我要表示减员后的3号，那么它其实是原来的7号，
又减去了2号，还剩下
4 7 8
1 2 3
我要表示减员后的1号，那么它其实是原来的4号
又减去了8号，还剩下
4 7
1 2
我要表示减员后的1号，那么它其实是原来的4号
又减去了4号，还剩下
7
1
结果是找不到数学关系
换一个思路
用m, num





 */


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class __1_JosephLoop {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        /*
        // 数组实现
        while (scan.hasNext()) {
            int N = scan.nextInt();
            int[] people = new int[8];
            int count = 0;
            int count1 = 0;
            for (int i = N-1; true; i++) {
                if (people[i] == 0) {
                    count++;
                }
                if (count % 3 == 0 && people[i] == 0) {
                    people[i] = 1;
                    count1++;
                }
                System.out.println(Arrays.toString(people) + ", " + count + ", " + i + ", " + count1);
                if (count1 == 7) {
                    break;
                }
                if (i == 7) {
                    i = -1;
                }
            }
            for (int i = 0; i < 8; i++) {
                if (people[i] == 0) {
                    System.out.println(i+1);
                }
            }
        }*/
        while (scan.hasNext()) {
            // m表示人数
            int m = scan.nextInt();
            // num表示报到num出局
            int num = scan.nextInt();
            // 从N号人开始报数
            int N = scan.nextInt();
            // 集合实现
            ArrayList<Integer> people = new ArrayList<Integer>();
            for (int i = 1; i <= m; i++) {
                people.add(i);
            }
            int count = N;
            int index = N - 1;
            while (people.size() > 1) {
                if (count % num == 0) {
                    people.remove(index);
                    index--;
                }
                System.out.println(people + ", " + count + ", " + index);
                index++;
                count++;
                if (index >= people.size()) {
                    index = 0;
                }
            }
            
            System.out.println("----------------------------------------");
            
            // 递归实现
            System.out.println(outId(m, num, 1));
        }
    }

    private static int outId(int m, int num, int i) {
        // TODO Auto-generated method stub
        return 0;
    }

    
}
